MEMORIA PRINCIPAL

La Memoria Principal es el dispositivo que se encarga de almacenar los programas que se quieran ejecutar, los datos y los resultados intermedios y finales. Almacena todo lo que debe ser procesado.


La memoria principal satisface las demandas de las cachés y sirve de interfaz de E/S. Generalmente está constituida por DRAM (RAM Dinámica) y tiene una capacidad de almacenamiento relativamente grande comparada con la caché (SRAM). Las DRAM también tienen tiempo de acceso mayor que las SRAM. Más aún, la naturaleza dinámica de las DRAM explica su rendimiento reducido en comparación con las SRAM. No obstante, su estructura simplificada y viabilidad económica ha hecho de las DRAM la elección para la memoria principal.


La latencia de memoria tradicionalmente se expresa utilizando dos medidas: tiempo de acceso y duración del ciclo. El tiempo de acceso es el tiempo desde que se pide una lectura hasta que llega la palabra deseada, mientras que la duración del ciclo es el tiempo mínimo entre peticiones a memoria.


Aunque generalmente es más fácil mejorar el ancho de banda de memoria con nuevas organizaciones que reducir la latencia, una mejora del ancho de banda permite incrementar el tamaño de los bloques de cache sin el correspondiente incremento en la penalización de fallos.


FIGURA: Tres ejemplos de anchura de bus, ancho de memoria, y entrelazado de memoria para lograr mayor ancho de banda de memoria. a) es el diseño más simple, siendo todo de la anchura de una palabra; b) muestra una memoria, bus y cache más anchos; mientras que c) muestra una cache y bus delgados con una memoria entrelazada.


















Las caches están, con frecuencia, organizadas con una anchura de una palabra porque la mayoría de los accesos de la CPU son de ese tamaño. A su vez, la memoria principal tiene el ancho de una palabra para que coincida con la anchura de la cache. Duplicar o cuadruplicar el ancho de la memoria, por tanto, duplicará o cuadruplicará el ancho de banda de memoria. Con una anchura de memoria principal de dos palabras, la penalización de fallos en nuestro ejemplo caería desde 4 • 8 o 32 ciclos de reloj a 2 • 8 o 16 ciclos de reloj. Con cuatro palabras de ancho la penalización de fallos es exactamente 1 • 8 ciclos de reloj. El ancho de banda es entonces un byte por ciclo de reloj en un ancho de dos palabras y de dos bytes por ciclo de reloj cuando la memoria tiene un ancho de cuatro palabras.


Hay coste en el bus más ancho. La CPU accederá todavía a la cache una palabra cada vez, por ello, se necesita ahora un multiplexor entre la cache y la CPU, y ese multiplexor puede estar en el camino crítico de temporización (Sin embargo, si la cache es más rápida que el bus, el multiplexor se puede colocar entre la cache y el bus). Otro inconveniente es que como la memoria principal es tradicionalmente expansible por el usuario, el incremento mínimo se duplica o cuadruplica. Finalmente, las memorias con corrección de errores tienen dificultades con las escrituras en una parte del bloque protegido (por ejemplo, una escritura de un byte); el resto de los datos sé debe leer para que el nuevo código de corrección de errores se pueda calcular y almacenar cuando se escriba el dato. Si la corrección de errores se hace sobre la anchura completa, la memoria más ancha incrementará la frecuencia de estas secuencias de «leer-modificar-escribir», porque más escrituras se convierten en escrituras parciales de bloques. Muchos diseños de memoria más ancha han separado corrección de errores cada 32 bits, ya que la mayor parte de las escrituras tienen ese tamaño. Un ejemplo de memoria principal más ancha fue un computador cuya cache, bus y memoria eran todos de 512 bytes de ancho.


Los chips de memoria se pueden organizar en bancos para leer o escribir múltiples palabras a la vez, en lugar de una sola palabra. Los bancos son de una palabra de ancho para que la anchura del bus y de la cache no necesiten cambiar, pero enviando direcciones a varios bancos, les permite a todos leer simultáneamente. Por ejemplo, enviar una dirección a cuatro bancos (con los tiempos de acceso mostrados en la pág. 460) da una penalización de fallos de 1 + 6 + 4 • 1 o 11 ciclos de reloj, dando un ancho de banda de, aproximadamente 1,5 bytes por ciclo de reloj. Los bancos también son útiles en las escrituras. Aunque las escrituras muy seguidas normalmente tendrán que esperar a que acaben las escrituras anteriores, los bancos permiten un ciclo de reloj para cada escritura, siempre que no estén destinadas al mismo banco.


La correspondencia entre direcciones y bancos afecta el comportamiento del sistema de memoria. El ejemplo anterior supone que las direcciones de cuatro bancos están entrelazadas a nivel de palabra, el banco 0 tiene todas las palabras cuya dirección módulo 4 es 0, el banco 1 todas las palabras cuya dirección módulo 4 es 1, y así sucesivamente. Esta correspondencia se denomina factor de entrelazado; memoria entrelazada, normalmente, significa bancos de memoria que están entrelazadas a nivel de palabra. Esto optimiza los accesos secuenciales a memoria. Un fallo de lectura de cache es un caso ideal para una memoria entrelazada a nivel de palabra, ya que las palabras de un bloque se leen secuencialmente. Las caches de postescritura hacen escrituras así como lecturas secuenciales, obteniendo incluso más eficiencia de la memoria entrelazada.


La motivación original para los bancos de memoria fue entrelazar accesos secuenciales. Una razón adicional es permitir múltiples accesos independientes. Controladores múltiples de memoria permiten bancos (o conjuntos de bancos de entrelazados por palabras) operar independientemente. Por ejemplo, un dispositivo de entrada puede utilizar un controlador y su memoria, la cache puede utilizar otro, y una unidad vectorial puede utilizar un tercero. Para reducir las oportunidades de conflictos se necesitan muchos bancos; la SX/3 de NEC, por ejemplo, tiene hasta 128 bancos.


Cuando aumenta la capacidad por chip de memoria, hay menos chips en un sistema de memoria del mismo tamaño, haciendo mucho más caros múltiples bancos. Por ejemplo, una memoria principal de 16 MB emplea 512 chips de memoria de 256 K (262 144) x 1 bit, organizada fácilmente en 16 bancos de 32 chips de memoria. Pero sólo emplea 32 chips de memoria de 4 M (4 194 304) x 1 bit para 16 MB, haciendo que el límite sea un banco. Esta es la principal desventaja de los bancos de memoria entrelazados. Aun cuando la regla empírica de Amdahl/Case para sistemas equilibrados de computadores recomiende aumentar la capacidad de memoria con el incremento del rendimiento de la CPU, un crecimiento del 60 por 100 en la capacidad de DRAM era superior en el pasado a la velocidad de incremento del rendimiento de la CPU.


Una segunda desventaja del entrelazado es, de nuevo, la dificultad de la expansión de memoria principal. Como el hardware de control de memoria probablemente necesitará bancos de igual tamaño, duplicar la memoria principal probablemente será el incremento mínimo.


Los tiempos de acceso a las DRAM se dividen en accesos a filas y accesos a columnas. Las DRAM disponen de un buffer de una fila de bits dentro de la DRAM para los accesos a las columnas. Esta fila es habitualmente la raíz cuadrada del tamaño de la DRAM, 1024 bits para 1 Mbit, 2 048 para 4 Mbits, y así sucesivamente. Todas las DRAM vienen con señales de temporización opcional que permiten accesos repetidos al buffer sin un tiempo de acceso a filas. Hay tres versiones para esta optimización:



A partir de DRAM de 1 Mbit, la mayoría de los dados pueden realizar alguna de las tres opciones, seleccionando la optimización en el instante que el dado se encapsula al escoger los «pads» que se van a usar. Estas operaciones cambian la definición del tiempo del ciclo para las DRAM.


La ventaja de estas optimizaciones es que utilizan la circuitería ya en las DRAM, añadiendo poco costo al sistema mientras logran casi una mejora de cuatro veces en el ancho de banda. Por ejemplo, el modo nibble se diseñó para aprovechar el mismo comportamiento de programa que la memoria entrelazada. El chip lee internamente cada vez cuatro bits, suministrando externamente cuatro bits en el tiempo de cuatro ciclos optimizados. A menos que la duración de la transferencia del bus sea más rápida que la duración del ciclo optimizado, el coste de memoria entrelazada de cuatro vías es sólo el control de temporización más complicado. El modo de página y de columna estática también se podrían utilizar para obtener aún mayor entrelazado con un control ligeramente más complejo. Las DRAM tienden a tener buffers tres-estados débiles, implicando que el entrelazado tradicional con más chips de memoria debe incluir chips de buffers para cada banco de memoria.